//
//  Status.swift
//  sinaweiboFirst
//
//  Created by mac on 16/3/11.
//  Copyright © 2016年 mac. All rights reserved.
//

import UIKit
import AFNetworking

class Status: NSObject {
    
    //微博创建时间
    var created_at: String?
    
    //微博id
    // Int - NSInteger(OC)->long long
    //32位机型上 默认长度32 64位机型上->64
    var id: Int64 = 0
    
    // 微博正文
    var text: String?
    
    //微博来源
    var source: String?
    
    var user:  User?
    
    var retweeted_status: Status?
    
    //配图字典数组
    var pic_urls: [[String : String]]? {
        didSet {
            // 给imageURLs赋值
            guard let urls = pic_urls else {
                return
            }
            //实例化属性
            imageURLs = [NSURL]()
            for item in urls {
                let urlString = item["thumbnail_pic"]
                
                //实现图片清晰
                let largeurlString = urlString?.stringByReplacingOccurrencesOfString("thumbnail", withString: "large")
                //相信后端给定的urlString 一定存在
                //相信后端给定的url一定可以得到NSURL对象
                let url = NSURL(string: largeurlString!)!
                imageURLs?.append(url)
            }
        }
    }
    //视图层 需要什么数据 在模型层直接处理 外界直接使用
    var imageURLs: [NSURL]?
    
    //kvc构造函数
    init(dict: [String: AnyObject]) {
        //对象已经创建完成
        super.init()
        //遍历传入的字典 依次调用 setValue: forKey:
        setValuesForKeysWithDictionary(dict)
    }
    
    override func setValue(value: AnyObject?, forKey key: String) {
        //对user做特殊处理
        if key == "user" {
            guard let dict = value as? [String : AnyObject] else {
                //不能转换为字典类型
                return
            }
            //字典转模型
            user = User(dict: dict)
            // 不加会让字典转模型不成功 回到字典
            
            //            print("key = \(key),value = \(value)")
            
            return
        }
        if key == "retweeted_status" {
            guard let dict = value as? [String : AnyObject] else {
                //不能转换为字典类型
                return
            }
            //字典转模型
            retweeted_status = Status(dict: dict)
            // 不加会让字典转模型不成功 回到字典
            
            return
        }
        
        super.setValue(value, forKey: key)
    }
    //过滤没有用到的key
    override func setValue(value: AnyObject?, forUndefinedKey key: String) { }
    
    //MARK: 重写描述方法 方便打印字典内容
    override var description: String {
        let keys = ["id","text","created_at","source"]
        let dict = self.dictionaryWithValuesForKeys(keys)
        return dict.description
    }
}

//网络访问
extension Status {
    class func loadHomeData(since_id: Int64,max_id: Int64,finished: (array: [Status]?) -> ()) {
        
        let urlString = "2/statuses/home_timeline.json"
        
        guard let token = UserAccount.shareAccount.access_token else {
            print("用户未登录或者登陆过期")
            return
        }
        
        var parameters = ["access_token" : token]
        
        
        if since_id > 0 {
            
            //将since_id 添加到参数字典中
            parameters["since_id"] = "\(since_id)"
        }
        if max_id > 0 {
            
            //将since_id 添加到参数字典中 -1解决上拉加载数据有重复数据
            parameters["max_id"] = "\(max_id - 1)"
        }
        
        
        //实例化发起网络请求
        
        HTTPClient.sharedHttpClient.requestJsonDict(.GET, urlString: urlString, parameters: parameters) { (dict, error) -> () in
            
            if error != nil {
                
                finished(array: nil)
                return
            }
            
            guard let array = dict!["statuses"] as? [[String : AnyObject]] else {
                finished(array: nil)
                print("数据结构错误")
                return
            }
            
            //创建可变数组
            var tempArray = [Status]()
            
            for item in array {
                //字典转模型
                let arr = Status(dict : item)
                //添加模型数据
                tempArray.append(arr)
            }
            
            //刷新页面
            finished(array: tempArray)
        }
    }
}

